package com.eugenema.handler;

import com.alibaba.excel.util.StringUtils;
import com.eugenema.entity.TestStep;
import com.eugenema.util.SeleniumUtil;
import org.openqa.selenium.JavascriptExecutor;

/**
 * 数据操作处理器
 *
 * @author Eugenema
 * @date 2023/3/11 17:50
 *
 **/
public class DataActionHandler {
    /**
     * 设置值到全局
     *
     * @author Eugenema
     * @date 2023/3/11 17:51
     *
     * @param testStep 动作
     *
     **/
    public void dataSet(TestStep testStep) throws Exception {
//		if(StringUtils.isBlank(testStep.getDetails().get("key")))
//			throw new Exception("set操作必须设置保存结果的键值，供后续操作使用，例子为details='key:credit'！");
//		String value = SeleniumUtil.getElement(testStep).getText();
//		SeleniumUtil.localmap.put(testStep.getDetails().get("key").toUpperCase(), value);
//		System.out.println("『正常测试』开始执行: <成功记录到本地List列表，" +SeleniumUtil.localmap.toString() + ">");
    }

    /**
     * 获取元素列表，并设置到全局
     * <br/>获取到的值存放在 SeleniumUtil.globalMap 中
     * <br/>key 为 step 元素 id
     * <br/>必须设置 locator 和 value 属性
     *
     * @author 马寅广
     * @date 2023/3/13 11:08
     *
     * @param testStep 动作
     *
     **/
    public void dataElementSet(TestStep testStep) throws Exception {
        if (testStep.getLocator() == null || StringUtils.isBlank(testStep.getValue())) {
            throw new RuntimeException("获取值失败：locator 或 value 属性为空");
        }
        SeleniumUtil.globalMap.put(testStep.getId(), SeleniumUtil.getElements(testStep));
    }

    /**
     * 执行 JS，并将返回值存入全局
     * <br/>获取到的值存放在 SeleniumUtil.globalMap 中
     * <br/>key 为 step 元素 id
     *
     * @author Eugenema
     * @date 2023/11/11 17:57
     *
     * @param testStep 动作
     **/
    public void dataJsGetSet(TestStep testStep) throws Exception {
        Object data = ((JavascriptExecutor) SeleniumUtil.getDriver()).executeScript(testStep.getValue());
        SeleniumUtil.globalMap.put(testStep.getId(), data);
    }
}
